package jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC java DataBase Connectivity
 * JDBC是java官当提供的一套接口，以标准的操作与任何数据库交互。
 * 不同的数据库提供商都会实现一套对应的实现类，我们称这套实现类为“取得"
 * 因此我们在操作不同数据库时，需要先下载对应的驱动类，使用JDBC接口定义的操作来操作驱动中的实现类
 * 完成对该数据库的操作
 */
public class JDBCDemo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        /*
            使用JDBC操作数据库的基本流程:
            1:加载驱动
            2:通过DriverManager(JDBC提供的)与数据库建立链接，创建出链接对象Connection
            3:通过Connection创建用于执行SQL语句的语句对象Statement
            4:通过Statement向数据库执行SQL语句
            5:如果执行的是DQL语句(查询语句)则会得到查询结果集ResultSet
            6:遍历结果集对象获取查询出的数据
            7:与数据库断开链接
         */
        //1加载驱动
        //不同数据库提供的驱动实现类的包名和类名不同，但无需记忆，现用现查就行
         Class.forName("com.mysql.cj.jdbc.Driver");//这个是MySQL的

        //2与数据链接
        Connection connection = DriverManager.getConnection(
                //格式:jdbc:mysql://主机地址信息/数据库名?一堆参数
                "jdbc:mysql://localhost:3306/tedu?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true",//数据库的地址(格式)
                "root",//登录数据库时的用户名
                "root"//数据库的密码
        );
        System.out.println("与数据库建立链接!");

        //3创建语句执行对象
        Statement statement = connection.createStatement();

        //4执行创建表操作
        String sql = "CREATE TABLE userinfo( " +
                "    id INT PRIMARY KEY AUTO_INCREMENT, " +
                "    username VARCHAR(32), " +
                "    password VARCHAR(32), " +
                "    nickname VARCHAR(32), " +
                "    age INT(3)" +
                ");";
        /*
            boolean execute(String sql)
            用于指定给定的SQL语句。返回值表示执行完毕后是否产生了查询结果集
            如果SQL书写有误，或则执行导致数据库出错，这里都会抛出异常

            虽然该方法什么类型的SQL都可以使用，但是因为DML和DQL语句有专门的方法，因此
            该方法通常用于执行DDL语句
         */
        statement.execute(sql);
        System.out.println("表创建成功!");
        connection.close();//关闭
    }
}
